//#include "DX2DRender.h"
//
//DX2DRender::DX2DRender(void) :
//	pIB(0),
//	pVB(0),
//	VertArray(0),
//	pD3DDevice(0),
//	nPrim(0),
//	nScreenWidth(0),
//	nScreenHeight(0),
//	CurPrimType(0),
//	CurBlendMode(0),
//	CurTexture(0),
//	bTextureFilter(true)
//{
//}
//
//DX2DRender::~DX2DRender(void)
//{
//}
//
//void DX2DRender:: Initialize(IDirect3DDevice9*p, int w, int h)
//{
//	pD3DDevice = p;
//	nScreenHeight = h;
//	nScreenWidth = h;
//
//	_SetProjectionMatrix(nScreenWidth, nScreenHeight);
//	D3DXMatrixIdentity(&matView);
//
//	_init_lost();
//}
//
//void DX2DRender :: _SetProjectionMatrix(int width, int height)
//{
//	D3DXMATRIX tmp;
//	D3DXMatrixScaling(&matProj, 1.0f, -1.0f, 1.0f);
//	D3DXMatrixTranslation(&tmp, -0.5f, height+0.5f, 0.0f);
//	D3DXMatrixMultiply(&matProj, &matProj, &tmp);
//	D3DXMatrixOrthoOffCenterLH(&tmp, 0, (float)width, 0, (float)height, 0.0f, 1.0f);
//	D3DXMatrixMultiply(&matProj, &matProj, &tmp);
//}
//
//void DX2DRender :: Begin2DDraw()
//{
//	pD3DDevice->SetRenderState( D3DRS_ZENABLE, D3DZB_FALSE );
//	_SetProjectionMatrix(nScreenWidth, nScreenHeight);
//	pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj);
//	D3DXMatrixIdentity(&matView);
//	pD3DDevice->SetTransform(D3DTS_VIEW, &matView);
//
//	pD3DDevice->SetFVF( D3DFVF_HGEVERTEX );
//	pD3DDevice->SetStreamSource( 0, pVB, 0, sizeof(DX2DVertex) );
//	pD3DDevice->SetIndices(pIB);
//
//	pD3DDevice->BeginScene();
//	pVB->Lock( 0, 0, (void**)&VertArray, 0 );
//}
//
//void DX2DRender :: End2DDraw()
//{
//	_render_batch(true);
//	pD3DDevice->EndScene();
//}
//
//void DX2DRender::_render_batch(bool bEndScene)
//{
//	if(VertArray)
//	{
//		pVB->Unlock();
//
//		if(nPrim)
//		{
//			switch(CurPrimType)
//			{
//			case DX2DPRIM_QUADS:
//				pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, nPrim<<2, 0, nPrim<<1);
//				break;
//
//			case DX2DPRIM_TRIPLES:
//				pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, nPrim);
//				break;
//
//			case DX2DPRIM_LINES:
//				pD3DDevice->DrawPrimitive(D3DPT_LINELIST, 0, nPrim);
//				break;
//			}
//
//			nPrim=0;
//		}
//
//		if(bEndScene)
//		{	
//			VertArray = 0;
//		}
//		else
//		{
//			pVB->Lock( 0, 0, (void**)&VertArray, 0 );
//		}
//	}
//}
//
//void DX2DRender :: _RenderQuad(const DX2DQuad *quad)
//{
//	if(VertArray)
//	{
//		if(CurPrimType!=DX2DPRIM_QUADS || nPrim>=VERTEX_BUFFER_SIZE/DX2DPRIM_QUADS || CurTexture!=quad->tex || CurBlendMode!=quad->blend)
//		{
//			_render_batch();
//
//			CurPrimType=DX2DPRIM_QUADS;
//			if(CurBlendMode != quad->blend) _SetBlendMode(quad->blend);
//			if(quad->tex != CurTexture)
//			{
//				pD3DDevice->SetTexture( 0, (LPDIRECT3DTEXTURE9)quad->tex );
//				CurTexture = quad->tex;
//			}
//		}
//
//		memcpy(&VertArray[nPrim*DX2DPRIM_QUADS], quad->v, sizeof(DX2DVertex)*DX2DPRIM_QUADS);
//		nPrim++;
//	}
//}
//
//bool DX2DRender :: _init_lost()
//{
//
//	// Create Vertex buffer
//
//	if( FAILED (pD3DDevice->CreateVertexBuffer(VERTEX_BUFFER_SIZE*sizeof(DX2DVertex),
//		D3DUSAGE_WRITEONLY,
//		D3DFVF_HGEVERTEX,
//		D3DPOOL_DEFAULT, 
//		&pVB,
//		NULL )))
//	{
//		return false;
//	}
//
//	// Create and setup Index buffer
//
//	if( FAILED( pD3DDevice->CreateIndexBuffer(
//		VERTEX_BUFFER_SIZE*6/4*sizeof(WORD),
//		D3DUSAGE_WRITEONLY,
//		D3DFMT_INDEX16,
//		D3DPOOL_DEFAULT, 
//		&pIB,
//		NULL ) ) )
//	{
//		return false;
//	}
//
//	WORD *pIndices, n=0;
//	if( FAILED( pIB->Lock( 0, 0, (void**)&pIndices, 0 ) ) )
//	{
//		return false;
//	}
//
//	for(int i=0; i<VERTEX_BUFFER_SIZE/4; i++) {
//		*pIndices++=n;
//		*pIndices++=n+1;
//		*pIndices++=n+2;
//		*pIndices++=n+2;
//		*pIndices++=n+3;
//		*pIndices++=n;
//		n+=4;
//	}
//
//	pIB->Unlock();
//	
//	// Set common render states
//
//	//pD3DDevice->SetRenderState( D3DRS_LASTPIXEL, FALSE );
//	/*
//
//	pD3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
//	pD3DDevice->SetRenderState( D3DRS_LIGHTING, FALSE );
//
//	pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   TRUE );
//	pD3DDevice->SetRenderState( D3DRS_SRCBLEND,  D3DBLEND_SRCALPHA );
//	pD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
//
//	pD3DDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
//	pD3DDevice->SetRenderState( D3DRS_ALPHAREF,        0x01 );
//	pD3DDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL );
//
//	pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_MODULATE );
//	pD3DDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
//	pD3DDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
//
//	pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_MODULATE );
//	pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
//	pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
//
//	pD3DDevice->SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTEXF_POINT);
//
//	if(bTextureFilter)
//	{
//		pD3DDevice->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTEXF_LINEAR);
//		pD3DDevice->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTEXF_LINEAR);
//	}
//	else
//	{
//		pD3DDevice->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTEXF_POINT);
//		pD3DDevice->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTEXF_POINT);
//	}
//	*/
//	nPrim=0;
//	CurPrimType=DX2DPRIM_QUADS;
//	CurBlendMode = BLEND_DEFAULT;
//	CurTexture = NULL;
//
//	pD3DDevice->SetTransform(D3DTS_VIEW, &matView);
//	pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj);
//
//	return true;
//}
//
//
//void DX2DRender :: _SetBlendMode(int blend)
//{
//	if((blend & BLEND_ALPHABLEND) != (CurBlendMode & BLEND_ALPHABLEND))
//	{
//		if(blend & BLEND_ALPHABLEND) pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
//		else pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
//	}
//
//	if((blend & BLEND_ZWRITE) != (CurBlendMode & BLEND_ZWRITE))
//	{
//		if(blend & BLEND_ZWRITE) pD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
//		else pD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, FALSE);
//	}			
//
//	if((blend & BLEND_COLORADD) != (CurBlendMode & BLEND_COLORADD))
//	{
//		if(blend & BLEND_COLORADD) pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_ADD);
//		else pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
//	}
//
//	CurBlendMode = blend;
//}
